package org.ccay.manage.security.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.ccay.core.base.BatchVO;
import org.ccay.core.base.PageVO;
import org.ccay.core.base.PagedResult;
import org.ccay.security.entity.Role;
import org.ccay.security.vo.RoleVO;

/**
 * 角色数据操作
 * @author chaowangbang
 * @since 2017年2月5日
 */
public interface IRoleDao {

	/**
	 * 通过id获取角色
	 * @param roleId
	 * @return
	 */
	Role findRoleById(Long roleId);
	
	
	/**
	 * 通过角色名称获取角色
	 * @param roleName
	 * @return
	 */
	Role findRoleByName(String roleName);
	
	/**
	 * 创建角色
	 * @param role
	 * @param createUser
	 */
	void createRole(Role role);
	
	/**
	 * 批量创建角色
	 * @param items2Create
	 * @param createBy
	 */
	void createRoles(List<RoleVO> items2Create);
	
	/**
	 * 修改角色
	 * @param role
	 * @param updateBy
	 */
	void updateRole(Role role);
	
	/**
	 * 批量修改角色
	 * @param items2Update
	 * @param l
	 */
	void updateRoles(List<RoleVO> items2Update);
	
	/**
	 * 删除角色，并级联删除所有角色关联表
	 * @param roleName
	 * @return
	 */
	void delRoleCascade(Long roleId);
	
	/**
	 * 批量删除角色，并级联删除所有角色关联表
	 * @param items2Delete
	 * @param l
	 */
	void deleteRolesCascade(List<Long> roleIds);

	/**
	 * 删除角色
	 * @param roleName
	 * @return
	 */
	void delRole(Long roleId);
	


	/**
	 *  批量校验角色名重复(单个)
	 * @param roleName
	 * @param roleId
	 * @return
	 */
	int checkUserNamesUnique(String roleName, Long roleId);
	
	/**
	 * 批量校验角色名重复（批量）
	 * @param batchItems
	 * @return
	 */
	List<String> checkUserNamesUnique(BatchVO<RoleVO> batchItems);

	/**
	 * 校验角色是否被引用
	 * @param roleIds
	 * @return
	 */
	List<Long> checkReferenced(List<Long> roleIds);

	

}
